/**
 * 显示消息提示框
 * @param content 提示的标题
 */
export function toast(content) {
	uni.showToast({
		icon: 'none',
		title: content
	})
}

/**
 * 显示模态弹窗
 * @param content 提示的标题
 */
export function showConfirm(content) {
	return new Promise((resolve, reject) => {
		uni.showModal({
			title: '提示',
			content: content,
			cancelText: '取消',
			confirmText: '确定',
			success: function(res) {
				resolve(res)
			}
		})
	})
}

/**
 * 参数处理
 * @param params 参数
 */
export function tansParams(params) {
	let result = ''
	for (const propName of Object.keys(params)) {
		const value = params[propName]
		var part = encodeURIComponent(propName) + "="
		if (value !== null && value !== "" && typeof(value) !== "undefined") {
			if (typeof value === 'object') {
				for (const key of Object.keys(value)) {
					if (value[key] !== null && value[key] !== "" && typeof(value[key]) !== 'undefined') {
						let params = propName + '[' + key + ']'
						var subPart = encodeURIComponent(params) + "="
						result += subPart + encodeURIComponent(value[key]) + "&"
					}
				}
			} else {
				result += part + encodeURIComponent(value) + "&"
			}
		}
	}
	return result
}


/**
 * 严格校验文本是否为 "YYYY-MM-DD" 格式，并确保其为有效日历日期，
 * 然后将其转换为以秒为单位的 UTC 时间戳 (当日零点)。
 *
 * @param {string} text - 需要校验和转换的文本.
 * @returns {number | null} 如果格式和日期均有效，则返回秒级时间戳；否则返回 null.
 */
export function getStrictDateTimestampInSeconds(text) {
  // 1. 输入类型检查
  if (typeof text !== 'string') {
    return null;
  }

  const trimmedText = text.trim();

  // 2. 正则表达式：严格匹配 "YYYY-MM-DD" 格式
  //    ^ 和 $ 锚定字符串的开始和结束
  const strictDateRegex = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/;

  if (!strictDateRegex.test(trimmedText)) {
    return null; // 格式不匹配
  }

  // 3. 分解日期组成部分
  const year = parseInt(trimmedText.substring(0, 4), 10);
  const month = parseInt(trimmedText.substring(5, 7), 10); // 1-12
  const day = parseInt(trimmedText.substring(8, 10), 10);

  // 4. 校验是否为有效的日历日期
  //    JavaScript Date 对象的月份是 0-11
  //    创建一个 Date.UTC 对象来验证，避免本地时区影响，并检查日期是否被调整
  const validationDate = new Date(Date.UTC(year, month - 1, day));

  if (
    validationDate.getUTCFullYear() !== year ||
    validationDate.getUTCMonth() !== (month - 1) || // 月份从0开始
    validationDate.getUTCDate() !== day
  ) {
    return null; // 不是一个有效的日历日期 (例如 2023-02-30 会被调整)
  }

  // 5. 格式和日期都有效，进行转换
  //    new Date("YYYY-MM-DD") 会被解析为该日期的 UTC 时间的 00:00:00
  const dateObject = new Date(trimmedText);

  //    理论上，如果前面的校验都通过了，这里 getTime() 不会是 NaN，但作为安全检查
  if (isNaN(dateObject.getTime())) {
    return null; // 几乎不可能到这里
  }

  // 将毫秒级时间戳转换为秒级时间戳
  return Math.floor(dateObject.getTime() / 1000);
}